/*
 * Copyright (C) 2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package me.panpf.sketch.sample.widget.fraction;

import me.panpf.sketch.sample.BuildConfig;
import me.panpf.sketch.sample.ResourceTable;
import me.panpf.sketch.util.Utils;
import ohos.aafwk.ability.fraction.Fraction;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Component;
import ohos.agp.components.ComponentContainer;
import ohos.agp.components.LayoutScatter;
import ohos.agp.components.Text;
import ohos.agp.text.RichText;
import ohos.agp.text.RichTextBuilder;
import ohos.agp.text.TextForm;
import ohos.agp.utils.Color;
import ohos.bundle.BundleInfo;
import ohos.rpc.RemoteException;
import ohos.utils.IntentConstants;
import ohos.utils.net.Uri;

/**
 * AboutFraction
 */
public class AboutFraction extends Fraction {
    @Override
    protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) {
        Component component = scatter.parse(ResourceTable.Layout_about_fraction, container, false);
        return component;
    }

    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        Text tvAboutVersions = (Text) getComponent().findComponentById(ResourceTable.Id_tv_about_versions);
        Text tvAboutTypes = (Text) getComponent().findComponentById(ResourceTable.Id_tv_about_types);
        Text tvAboutUrl = (Text) getComponent().findComponentById(ResourceTable.Id_tv_about_url);

        try {
            BundleInfo bundleInfo = getFractionAbility().getBundleManager().getBundleInfo(getFractionAbility().getBundleName(), 0);
            tvAboutVersions.setText(getFractionAbility().getString(ResourceTable.String_text_version, bundleInfo.getVersionName()));
        } catch (RemoteException e) {
            Utils.error("RemoteException: " + e.getMessage());
        }

        tvAboutTypes.setText(getFractionAbility().getString(ResourceTable.String_text_types, BuildConfig.BUILD_TYPE, "lollipop"));

        RichText leadingMargin = new RichTextBuilder()
                .mergeForm(new TextForm()
                        .setUnderline(true)
                        .setTextColor(Color.getIntColor("#BC5862"))
                        .setTextSize(tvAboutUrl.getTextSize())
                ).addText(tvAboutUrl.getText())
                .build();
        tvAboutUrl.postLayout();
        tvAboutUrl.setRichText(leadingMargin);
        tvAboutUrl.setClickedListener(component -> {
            Intent intents = new Intent();
            Operation operation = new Intent.OperationBuilder()
                    .withUri(Uri.parse(tvAboutUrl.getText()))
                    .withAction(IntentConstants.ACTION_SEARCH)
                    .build();
            intents.setOperation(operation);
            getFractionAbility().startAbility(intents);
        });
    }
}
